import { defineStore } from 'pinia';

// 定义模型配置的类型
interface ModelConfig {
  confidence: number;
  iou: number;
  name: string;
}

// 使用 Pinia 定义一个 store
export const useModelStore = defineStore('model', {
  // 定义状态
  state: () => ({
    config: {
      confidence: 0.5, // 默认置信度阈值，表示模型预测的置信度阈值
      iou: 0.5, // 默认IOU阈值，表示模型预测的交并比阈值
      name: '', // 添加模型名称
    } as ModelConfig,
    files: [] as Array<{ name: string; url: string }>, // 存储文件的元数据
  }),

  // 定义 getter
  getters: {
    // 获取当前配置
    getConfig: (state) => state.config, // 返回当前的模型配置
    // 获取文件列表
    getFiles: (state) => state.files, // 返回文件的元数据列表
  },

  // 定义 actions
  actions: {
    // 更新配置
    updateConfig(newConfig: ModelConfig) {
      // 合并新的配置到现有配置中
      this.config = { ...this.config, ...newConfig };
    },

    // 添加文件元数据
    addFile(file: { name: string; url: string }) {
      this.files.push(file);
    },

    // 移除文件元数据
    removeFile(index: number) {
      this.files.splice(index, 1);
    },

    // 清空文件元数据
    clearFiles() {
      this.files = [];
    },

    // 检查模型是否为空
    checkModel() {
      if (!this.config.name) {
        throw new Error('模型名称不能为空！');
      }
    },
  },
});
